#!/usr/bin/env python3
"""
脚本名称：14_exe.py
面试描述：Python中的__init__ 和__new__ 方法有什么区别?
考察点: __new__ 负责创建并返回实例对象（在内存中分配空间）而 __init__ 负责初始化实例属性（对象已存在，填充数据）
生活比喻：
作者：Gavin
创建日期：2025-05-27
版本：1.0
依赖库：无
使用方法： python 14_exe.py
"""


# 1. 基础对比
class Example:
    def __new__(cls, *args, **kwargs):
        print("__new__: 创建实例")
        instance = super().__new__(cls)  # 必须返回实例
        return instance

    def __init__(self, value):
        print("__init__: 初始化实例")
        self.value = value


obj = Example(10)


# 输出顺序：
# __new__: 创建实例
# __init__: 初始化实例

# 2. 单例模式（__new__ 实战)
class Singleton:
    _instance = None

    def __new__(cls):
        if cls._instance is None:
            cls._instance = super().__new__(cls)
        return cls._instance


a = Singleton()
b = Singleton()
print(a is b)  # True（a 和 b 是同一个实例）
